package testescomjunit;

/**
 * @author Felipe Tavares
**/

public class Triangulo {
    private int ladoA;
    private int ladoB;
    private int ladoC;
    private String tipo;
    
    public static final String MSG_TRIANGULO_INVALIDO = "O valor dos lado não formam um triângulo!";
    public static final String MSG_LADO_INVALIDO = "Valor do LADO inválido! Insira valor maior que 0.";
    public static final String MSG_LADOA_INVALIDO = "Valor do LADO A inválido! Insira valor maior que 0.";
    public static final String MSG_LADOB_INVALIDO = "Valor do LADO B inválido! Insira valor maior que 0.";
    public static final String MSG_LADOC_INVALIDO = "Valor do LADO C inválido! Insira valor maior que 0.";
        
    
    public Triangulo(int ladoA, int ladoB, int ladoC) throws AppException{
        this.validaEntradas(ladoA, ladoB, ladoC);
        this.validaTriangulo(ladoA, ladoB, ladoC);
        this.ladoA = ladoA;
        this.ladoB = ladoB;
        this.ladoC = ladoC; 
        //this.tipo = tipoDoTriangulo(ladoA, ladoB, ladoC);
    }

    public int getLadoA() {
        return ladoA;
    }

    public int getLadoB() {
        return ladoB;
    }

    public int getLadoC() {
        return ladoC;
    }

    public void setLadoA(int ladoA) {
        this.ladoA = ladoA;
    }

    public void setLadoB(int ladoB) {
        this.ladoB = ladoB;
    }

    public void setLadoC(int ladoC) {
        this.ladoC = ladoC;
    }
    
    public int perimetro(){
        return (this.ladoA + this.ladoB + this.ladoC);
    }
    
    public int area(){
        int p = perimetro()/2;  //Semi-perímetro
        
        return (int) Math.sqrt(p*(p-ladoA)*(p-ladoB)*(p-ladoC));
    }

    public void validaEntradas(int ladoA, int ladoB, int ladoC) throws AppException{
        this.validaLadoA(ladoA);
        this.validaLadoB(ladoB);
        this.validaLadoC(ladoC);
    }

    public void validaTriangulo(int ladoA, int ladoB, int ladoC) throws AppException{
        if (!((ladoB - ladoC) < ladoA  && ladoA < (ladoB + ladoC))) {
            throw new AppException(MSG_TRIANGULO_INVALIDO);
        }
            
        if (!((ladoA - ladoC) < ladoB  && ladoB < (ladoA + ladoC))) {
            throw new AppException(MSG_TRIANGULO_INVALIDO);
        }
        
        if (!((ladoA - ladoB) < ladoC  && ladoC < (ladoA + ladoB))) {
            throw new AppException(MSG_TRIANGULO_INVALIDO);
        }
    }
    
    private void validaLadoA(int ladoA) throws AppException{
        if(ladoA <= 0) 
            throw new AppException(MSG_LADOA_INVALIDO);
    }
    
    private void validaLadoB(int ladoB) throws AppException{
        if(ladoB <= 0) 
            throw new AppException(MSG_LADOB_INVALIDO);
    }
    
    private void validaLadoC(int ladoC) throws AppException{
        if(ladoC <= 0) 
            throw new AppException(MSG_LADOC_INVALIDO);
    }
    
    public String tipoDoTriangulo(int ladoA, int ladoB, int ladoC){
        if(ladoA == ladoB && ladoA == ladoC)
            return "Equilatero";
        
        if(ladoA != ladoB && ladoA != ladoC && ladoB != ladoC)
            return "Escaleno";
        
        return "Isosceles";
    }
}